<?php
namespace App\Http\Controllers\admin;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use DB;
use Hash;
class AdministratorsController extends Controller
{
    /**
     *  管理员管理首页
     */
    public function getIndex(Request $request)
    {
        // 接受搜索的关键字
        $search = $request -> input('search','');
       
        // 接受每页显示的条数
        $count = $request -> input('count',10);
        
        // 获取用户表(administrators)里面的数据信息
        $data = DB::table('administrators') -> where('id','like','%'.$search.'%') -> orderBy('id','asc') -> paginate($count);

        // 统计管理员总数
        $datacount = DB::table('administrators') -> where('id','like','%'.$search.'%') -> count();

        // 获取当前登录的管理员的ID
        $id = session('adminid');

        // 获取当前登录的管理员信息
        $array = DB::table('administrators') -> where('id','=',$id) -> first();

        // 加载模板 并且传数据
        return view('admin.administrators.index',['data'=>$data,'request'=>$request -> all(),'array'=>$array,'datacount'=>$datacount]);
    }

    /**
    *   管理员添加
    */
    public function getAdd()
    {
        // 获取administrators表中最大主键(ID)的信息
        $data = DB::table('administrators') -> orderBy('id','desc') -> first();

        // 加载模板 并且传数据
        return view('admin.administrators.add',['data'=>$data]);
    }

    /**
    *   管理员添加操作  
    */
    public function postInsert(Request $request)
    {
        // 自动验证表单
        $this -> validate($request,[
            'password' => 'required',
            'repassword' => 'required|same:password',
        ],[
            'password.required' => '密码不能为空',
            'repassword.required' => '确认密码不能为空',
            'repassword.same' => '两次密码不一致',
        ]);

        //接受数据
        $data = $request -> except('_token','repassword');
        
        // 加密密码
        $data['password'] = Hash::make($data['password']);
        
        // 注册时间
        $data['ctime'] = time();
        
        // 用于找回密码
        $data['token'] = str_random(50);

        // 将数据插入到数据表中
        $res = DB::table('administrators') -> insert($data);

        //处理结果
        if($res){
            return redirect('/admin/administrators/index') -> with('success','添加成功');
        }else{
            return back() -> with('error','添加失败');
        }
    }

    /**
    *   管理员删除操作
    */
    public function getDelete(Request $request)
    {
        // 接受要删除的管理员id
        $id = $request -> input('id');
        
        // 从数据表user里删除ID为$id的用户 返回影响行数
        $res = DB::table('administrators') -> where('id','=',$id) -> delete();

        // 判断返回的影响行数 把操作的结果压入session
        if ($res > 0) {
            return redirect('/admin/administrators/index') -> with('success','删除成功');
        } else {
            return back() -> with('error','删除失败');
        }
    }

     /**
    *   用于用户状态的修改 0为开启 1为禁用
    */
    public function getUpdate(Request $request)
    {   
        // 只接受用户的ID和status
        $arr = $request -> only('id','status');
        
        // 修改数据库中用户ID的status
        $res = DB::table('administrators') -> where('id','=',$arr['id']) -> update(['status'=>$arr['status']]);
        
        // 判断返回的影响行数 把操作的结果压入session
        if ($arr['status'] == 1) {
            if ($res > 0) {
                return redirect('/admin/administrators/index') -> with('success','禁用成功');
            } else {
                return back() -> with('error','禁用失败');
            }
        } else {
            if ($res > 0) {
                return redirect('/admin/administrators/index') -> with('success','开启成功');
            } else {
                return back() -> with('error','开启失败');
            }
        }
           
    }


    /**
    *   管理员修改密码页面
    */
    public function getEdit()
    {
        // 接受要修改的管理员id
        $id = session('adminid');

        // 加载模板 并且传数据
        return view('admin.administrators.edit',['id'=>$id]);
    }

     /**
    *   管理员修改密码操作
    */
     public function postUpdate(Request $request)
     {  
        // 自动验证表单
        $this -> validate($request,[
            'password' => 'required',
            'repassword' => 'required|same:password',
        ],[
            'password.required' => '密码不能为空',
            'repassword.required' => '确认密码不能为空',
            'repassword.same' => '两次密码不一致',
        ]);

        // 接受要修改的管理员id
        $id = $request -> input('id');
        
        // 接受修改页面提交的数据
        $data = $request -> only('password');

        // 加密密码
        $data['password'] = Hash::make($data['password']);

        // 用于找回密码
        $data['token'] = str_random(50);
        
        // 修改数据表中的密码
        $res = DB::table('administrators') -> where('id',$id) -> update($data);

        // 判断返回的影响行数 把操作的结果压入session
        if ($res > 0) {
            return redirect('/admin/administrators/index') -> with('success','修改成功');
        } else {
            return back() -> with('error','修改失败');
        }
     }

    /**
    *   后台注销清除session
    */
    public function getLogout(Request $request)
    {
        // 清除所有session
        $request -> session() -> flush();

        // 返回登录页面
        return redirect('/admin');
    }
}
